package com.shuang.stackAndQueue1;

import java.util.Stack;

public class MyQueue {

    //使用两个栈模拟队列 一个栈用来输入存数据然后弹出时全部弹出 输入到另一个栈里然后再输出 保证输出顺序跟队列一样

    //定义两个栈
    Stack<Integer> stackIn; //用于输入
    Stack<Integer> stackOut;  //输出

    public MyQueue() {
        stackIn = new Stack<>(); //进栈
        stackOut = new Stack<>(); //出栈
    }

    public void push(int x) {
        //将数据输入到队列中 （进栈）
        stackIn.push(x);
    }

    public int pop() {
        //数据从队列中输出一位 按照先进先出原则
        //从输出栈 来 输出

        //判断输出栈有没有数据 没有的话先对输出栈进行添加数据（从输入栈依次输出的数据存到输出栈）
        dumpstackIn();
        return stackOut.pop();
    }

    public int peek() {
        dumpstackIn();
        return stackOut.peek();
    }

    public boolean empty() {
        return stackIn.isEmpty() && stackOut.isEmpty();
    }

    // 如果stackOut为空，那么将stackIn中的元素全部放到stackOut中
    private void dumpstackIn(){
        if (!stackOut.isEmpty()){
            return;
        }

        while (!stackIn.isEmpty()){
            stackOut.push(stackIn.pop());
        }
    }
}
